package com.zhp.service;

import com.zhp.model.User;
import com.zhp.model.UserFocus;

import java.util.List;
import java.util.Map;

/**
 *
 */
public interface UserService {


    /**
     * 根据用户名查询
     * @param map 自选字段
     * @return 用户
     */
    List<User> findByT(Map<String, Object> map);

    /**
     * 注册
     * @param email 邮箱
     * @param username 用户名
     * @param password 密码
     * @return 用户
     */
    Boolean registerUser(String email,String username,String password);


    /**
     * 发送验证码
     * @param email
     * @return
     */
    String sendEmail(String email);

    /**
     * 修改密码
     * @param email
     * @param password
     * @return
     */
    boolean resetPassword(String email, String password);

    Map<String, Object> findUserBaseInfo(String username);

    /**
     * 查找用户信息
     * @param id 用户ID
     * @return map对象
     */
    Map<String, Object> getUserInfo(String id);

    /**
     * 更新用户登录时间
     *
     * @param username  账户名
     */
    void updateLoginTime(Integer userId);


    /**
     * 根据用户ID 查询
     * @param id
     * @return
     */
    User findById(Integer id);

    /**
     * 分页查询用户列表信息
     * @param userId  当前登录得用户ID
     * @param currentPage 当前页
     * @param name 模糊查询
     * @return list对象
     */
    List<Map<String,Object>> getUserList(String userId, int currentPage, String name);

    /**
     * 分页查询用户总数量信息
     * @param name 模糊查询
     * @return
     */
    long getUserCount(String name);

    /**
     * 关注用户
     * @param userId 当前用户ID
     * @param ufid 关注对方的ID
     * @return true表示关注成功
     */
    boolean followUser(String userId, String ufid);

    /**
     * 根据用户以及关注对应用户Id查找是否有关注
     * @param userId
     * @param ufid
     * @return
     */
    UserFocus getFollowUser(String userId, String ufid);

    /**
     * 根据关注表的主键id取消关注
     * @param id  主键id
     * @return true取关成功
     */
    boolean unFollowUser(Integer id);

    /**
     * 更新所有信息
     * @param user 对象
     * @return
     */
    int update(User user);

    /**
     * 更新头像到数据库
     * @param s 头像的虚拟路径
     */
    void uploadImg(String userId,String s);


    /**
     * 根据用户id，查找第page页id关注了的用户有哪些
     * @param id 用户id
     * @param page 分页 第几页
     * @return
     */
    List<User> getFocus(String id,int page);

    /**
     * 根据用户id，查找找id关注了的用户总共有几个
     * @param id  用户id
     * @return
     */
    Number getFocusAll(String id);
}
